package Controller;


import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import Model.Contact;
import Model.FichierManager;
import View.addContactView;
import View.addressBookView;
/**
 * 
 * @author mada
 *classe addContactController
 *s'occupe de gerer la vue addContactView avec ses données
 */
public class addContactController{
	
	private addContactView nouvFen;
	private addressBookView fenetrePrincipale;
	private FichierManager fm= new FichierManager("fichier.txt");
	private classAjouContact ok=new classAjouContact();
	private List<Contact> contacts;
	private Thread t;
	
	public addContactController(addContactView nouvFen){

		this.nouvFen=nouvFen;
		this.nouvFen.cancelContactListener(new classCancelContact());
		this.nouvFen.ajouterContactListener(new classAjouContact());

	}
	
		/**
		 * 
		 * @author mada
		 * classe interne executé lorsqu'on clique 
		 * sur le boutton ok dans la vue
		 */
		public class classAjouContact implements ActionListener{			
			@Override
			public void actionPerformed(ActionEvent e) {
		
			// creer mon thread qui appelle ma fonction run que j'ai implement�� ci-dessous
				System.out.println("Avant thread : "+System.currentTimeMillis());
				Contact nouv_cont=new Contact(nouvFen.getJtf1(),nouvFen.getJtf2(),nouvFen.getJtf3(),nouvFen.getJtf4(),nouvFen.getJtf5(),nouvFen.getJtf6(),nouvFen.getJtf7(),nouvFen.getCombo());
				contacts= new ArrayList<Contact>();
				
				try {
					contacts=fm.recupererContact();
				} catch (FileNotFoundException e2) {
					
					e2.printStackTrace();
				}
				/**
				 * boucle for qui empeche d'ajouter des contacts doublon
				 * cette boucle est à mettre en commentaire si l'on veut
				 * tester l'ajout d'un million de contact pour tester 
				 * l'efficacité des threads
				 */
				for( int i=0; i<contacts.size(); i++){
					
					 if (nouv_cont.getFirstName().equals(contacts.get(i).getFirstName()) && nouv_cont.getLastName().equals(contacts.get(i).getLastName() ))
							 {	
						 
								javax.swing.JOptionPane.showMessageDialog(null, "Ce contact existe deja.");
								nouvFen.dispose();
								return ;
						
							 } 
					
				 }
				
				
				
					t=new Thread(new threadAction());
					t.start();	
						
					
					fenetrePrincipale.remplirArrayList();
					String grp=nouvFen.getCombo();
					if(grp.equals("Amis")) fenetrePrincipale.remplirJlistAmis();
					else if(grp.equals("Famille")) fenetrePrincipale.remplirJlistFamille();
					else fenetrePrincipale.remplirJlistTravail();
					fenetrePrincipale.remplirJlist();
			
				System.out.println("Avant thread : "+System.currentTimeMillis());
				nouvFen.dispose();
		}
	
	}
		public class classCancelContact implements ActionListener{

			@Override
			public void actionPerformed(ActionEvent e) {
				nouvFen.dispose();
				
			}
			
			
		}
		/**
		 * 
		 * @author mada
		 * class interne implémenté de Runnable:
		 * la fonction run est executé dans la methode actionPormed
		 * dans la class interne classAjoutContact lorsque le
		 * thread est instancié avec la methode .start()
		 * 
		 */
		class threadAction implements Runnable{
		
			
			@Override
			public void run() {
				System.out.println("dans le run");
				Contact nouv_cont=new Contact(nouvFen.getJtf1(),nouvFen.getJtf2(),nouvFen.getJtf3(),nouvFen.getJtf4(),nouvFen.getJtf5(),nouvFen.getJtf6(),nouvFen.getJtf7(),nouvFen.getCombo());
				/**
				 * retirer les commentaires de la boucle for
				 * si vous voulez generer 1 000 000 de contacts
				 */
				//for (int i=0; i<1000000; i++){
				try {
					fm.ajouterContact(nouv_cont);
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				//}
				}
			}
		}
		

}
